C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

初学者在学习C语言的时候,最头疼的可能就是指针,话不多说。让我们直接进入正题

直接上代码

int main(void)
{
	int *p = 0;
	printf("%d", *p);
	system("pause");
	return 0;
}

直接运行,好了,程序是不是报错了?那就对了。因为此时的int *p=0实际等于int *p; p=0;
让我们来验证一下对不对

int main(void)
{
	int *p = 0;
	printf("%d", p);
	system("pause");
	return 0;
}

这说明此时指针*p装的不是0,而是以0作为地址的一个值,输出地址为0的值编译器当然会直接报错。
那为什么会这样呢?因为此时的int *p其实是(int*)p;把它看成是一个新的类型,就和int a=0;差不多,这也就解释了为什么会输出0的原因。

而我们知道定义一个指针*p,p里面装的是地址,*p则表示这个地址上所储存的值,
*那么我们如何获取这个地址呢*
这时候就可以用”&“

比如

int *p ;
	int a = 2;
	p = &a;
	printf("%d\n", *p);

此时的p通过取地址符号取得了a的地址,那么*p储存的就是a的值,你也可以把它看成是另一个a,改变它的值也可以改变a的值

比如这样

int *p ;
	int a = 2;
	p = &a;
	*p = 1;
	printf("%d\n", *p);

此时的就会输出 1

总结

以上所述是小编给大家介绍的C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解,希望对大家有所帮助,也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • C语言 一级指针与二级指针详细介绍

    指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在内存中开辟了一块内存, 存储数据 // 开辟了 8 个字节, 在 Mac 下 指针都占 8 个字节 使用指针, 实际上应该说成使用指针变量      1> 算术运算 +1 移动几个字节? 看类型: int *,  long *,  char *     2> 获得地址表示的数据 指针里面存储的是地

  • C语言指针应用简单实例

    C语言指针应用简单实例 这次来说交换函数的实现: 1. #include <stdio.h> #include <stdlib.h> void swap(int x, int y) { int temp; temp = x; x = y; y = temp; } int main() { int a = 10, b = 20; printf("交换前:\n a = %d, b = %d\n", a, b); swap(a, b); printf("交换

  • C语言中 值传递和指针传递实例详解

    C语言中 值传递和指针传递实例详解 在C语言中,函数的参数和返回值的传递方式有两种:值传递和指针传递. 值传递和指针传递初学者总会有一种朦胧的感觉,所以建议把指针传递的概念摸透,才能熟练应用. 值传递示例:x其实是n的一份临时拷贝,所以并不会改变n的值. #include <stdio.h> #include <windows.h> void Fun(int x) { x = 1; } int main() { int n = 2; Fun(n); printf("%d\

  • C语言 结构体和指针详解及简单示例

    指针也可以指向一个结构体,定义的形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1 = { "Tom", 12, 18, 'A', 136.5 }; //结构体指针struct stu *pstu = &stu1; 也可以在定义结构体的同时定义结构

  • C语言 指针与二维数组详解

    二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; 从概念上理解,a 的分布像一个矩阵: 0   1   2   3 4   5   6   7 8   9  10  11 但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: C语言中的二维数组是按行排列的,也就是先存放 a[

  • C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    初学者在学习C语言的时候,最头疼的可能就是指针,话不多说.让我们直接进入正题 直接上代码 int main(void) { int *p = 0; printf("%d", *p); system("pause"); return 0; } 直接运行,好了,程序是不是报错了?那就对了.因为此时的int *p=0实际等于int *p; p=0; 让我们来验证一下对不对 int main(void) { int *p = 0; printf("%d"

  • Kotlin中标准函数run、with、let、also与apply的使用和区别详解

    前言 和Java相比,在Kotlin中提供了不少新的特性.这次我们就来聊一聊Kotlin的一些通用的扩展标准函数run,with,let,also和apply.对于这五个标准函数它们都存在于Kotlin的源码标准库当中,也就是在Standard.kt文件当中.它们都是适用于任何对象的通用扩展函数.但是对于run,with,let,also和apply这五个函数他们的用法及其相似,以至于我们无法确定去选择使用哪一个.那么现在我们就来聊一下这五个函数它们的使用方法,它们的不同之处以及在什么场景下去使

  • C语言中指针和数组试题详解分析

    目录 数组题: 程序一(一维数组): 字符数组 程序二(字符数组): 程序三(字符数组): 程序四(字符数组): 程序五(字符数组): 二维数组 程序六( 二维数组): 指针题 程序七( 指针): 程序八( 指针): 程序九( 指针): 程序十( 指针): 程序十( 图): 程序十一( 指针): 程序十二( 指针): 程序十三( 指针): 指针 和 数组 试题解析 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安

  • C语言中指针常量和常量指针的区别

    在面试中我们经常会被面试官问到什么是常量指针,什么又是指针常量. 指针常量就是指针本身是常量,指针里面所存储的内容(内存地址)是常量,不能改变.但是,对应内存地址里存的内容是可以通过指针改变的. 常量指针就是指向常量的指针,指针中所存地址中对应的值是常量,不能通过指针来修改它的值.但是,指针自身不是常量,它自身的值可以改变,从而指向另一个地址. 指针常量与常量指针的声明 指针常量的声明:数据类型 * const 变量名. 常量指针的声明:数据类型 const * 变量名 或者 const 数据类

  • 从go语言中找&和*区别详解

    *和&的区别 :& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : 先构建一个Rect类型 : 1. &是取地址符号, 取到Rect类型对象的地址 2. *可以表示一个变量是指针类型(r是一个指针变量): 3.*也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值 4.查看这个指针变量的地址 , 基本数据类型直

  • C语言中 & 和 &&的区别详解

    这是c语言的基本语法,但是在学习的过程中也总是搞混.所以记录一下,也和大家分享一下. &:按照位与操作,例如:0010&1101,结果为0000 &是java中的位逻辑运算:       eg: 2&3=2: 分析如下: 2的二进制为10 :3的二进制为11 : 逻辑&之后为10 &&:短路与,表示如果两个条件都成立则执行之后的逻辑: 例如:if(a==0&&b==0),意思就是if a为0并且b为0的时候,进行下一步操作. || 短

  • C++ 中指针和引用有什么区别详解

    C++ 中指针和引用有什么区别详解 1.从内存上来讲  系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间. 2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象. 3.所以引用访问对象是直接访问.指针访问对象是间接访问. 4.如果pa是指针,那么*pa就是引用了. 但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝.程序如下: #include<stdio.h> void pt(int * pta,

  • MySQL中int(10)和int(11)的区别详解

    目录 一.背景 二.MySQL整数类型 总结: 一.背景 在创建数据库表的时候,我们经常会用到int(x)来定义一个字段的类型,一直误以为这里的x表示存储数字的长度. 其实大错特错,这里的 x 指的是 最大显示宽度(最大有效显示宽度是255),且显示宽度与存储大小或类型包含的值的范围无关. 二.MySQL整数类型 类型 字节 取值范围 显示宽度 tinyint 1 -128 ~ 127 4 smallint 2 -32768 ~ 32767 6 mediumint 3 -8388608 ~ 83

  • 深度学习中shape[0]、shape[1]、shape[2]的区别详解

    深度学习中shape[0].shape[1].shape[2]的区别详解对于图像来说: img.shape[0]:图像的垂直尺寸(高度) img.shape[1]:图像的水平尺寸(宽度) img.shape[2]:图像的通道数 举例来说,下面是一张300X534X3的图像,我们用代码,进行验证. 代码如下: import matplotlib.image as mpimg # mpimg 用于读取图片 if __name__ == '__main__': img = mpimg.imread('

  • Go中的nil切片和空切片区别详解

    Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作.每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0. 字符串变量的默认值为空字符串. 布尔型变量默认为false. 切片.函数.指针变量的默认为nil. func main() { var s1 []int // nil切片 s2 := make([]int,0) // 空切片 s4 := make([]int,0) // 空切片 s5 := []int{} // 空切片 } 直接看代码,不同声明方式:使用

随机推荐