第六章 数组名与指针

指针的算术运算符是指针和数组之间的一种关联,但不是唯一关联:

 可以使用数组名作为指向数组第一个元素的指针,但是不可以给数组名赋新的值。

//如下声明a
int a[10];

//用a作为指向数组第一个元素的指针,可以修改a[0];

*a = 11;

//通过a + 1来访问a[1];
*(a + 1) = 22;

但是试图使数组名指向其他地方是错误的:

#include <stdio.h>

int main()
{
	char arr[] = "yangxunwu";

	while (*arr != ‘\0‘) {
		arr++;
	}
	return 0;
}

会发生下面的报错,表达式必须是可修改的左值。

如果需要可以把数组名赋值给真正的指针变量:

#include <stdio.h>

int main()
{
	char arr[] = "yangxunwu";
        //数组名赋值给指针变量
	char *ptr = arr;
	while (*ptr != ‘\0‘) {
		ptr++;
	}
	return 0;
}

  

时间: 2024-10-23 10:27:51

第六章 数组名与指针的相关文章

第二章 数组名是一个指针常量吗?

数组名是一个指针常量这种观点来源于数组名在表达式计算中与指针的结果等效性.例如下面的代码: int a[10], *p = a, *q; q = a + 1; q = p + 1; 在效果上看,a + 1与 p + 1是相同的,这很容易给人一种a就是p的假象,但,这仅仅是假象.鉴于指针常量包含了指针和常量两类概念,我们可以把这个问题分开两部分进行讨论. 一.数组名是指针吗? 在<C与指针>一书中,作者用一个著名的例子阐述了数组名与指针的不同.在一个文件中定义:int a[10];然后在另一个文

语法》第六章 数组

(本文为阮一峰js标准教程的学习笔记,旨在总结该教程中涉及的知识点大纲及个人所做的一些拓展,方便作为"目录"或者"大纲"复习和查漏补缺,详细内容请参见阮一峰教程原文) 第二部分 语法 *********第六章 数组*********** 一.数组的定义1.概念:按次序排列的一组数,每个值都有编号(从0开始)整个数组用[]表示2.可以定义时赋值,也可定以后赋值.arr[0]='a';3.任何数据类型都可放入数组,[1,'1',[1,2],{},function(){}

C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。

左值:出现在赋值符左边的符号有时称为左值. 右值:出现在赋值符右边的符号有时称为右值. 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址.相反,存储于变量中的值(它的右值)只有在运行时才可知.如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器. 可以看到,每个符号的地址在编译时可知. 对比一下几个式子: //常规变量 int a=1;//这里a作为左值出现,代表的是地址,即在a表示的这个内存地址存入数值1.即a代表的内

c/c++数组名和指针区别深入探索

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了.而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针".很幸运,我的大学老师就是其中之一.时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解. 想必这种误解的根源在于国内某著名的C程序设计教程.如果这篇文章能够纠正许多中国程序员对数组名和指针的误解,

对于C语言中数组名是指针的理解

我们都知道,c语言中数组名是一个指针,比如下面这段代码 #include<iostream>using namespace std;int main(){ int a[4]={1,2,3,4}; for(int i=0;i<4;i++) {  cout<<*(a+i);//*(a+i)和a[i]是等价的.  cout<<endl; } return 0;} 但是看下面这个代码 #include<iostream>using namespace std;

数组名和指针的深入理解(C++)

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用.于是乎,很多程序设计者就被搞糊涂了. 魔幻数组名 请看程序(本文程序在WIN32平台下编译): #include <iostream> using namespace std; int main() { char str[10]; char* pStr = str; cout << "sizeof(str): \t" << sizeof(str) <&

C语言,数组名,指针常量和常量指针

自己给自己劝退一波~ 先介绍指针常量和常量指针 const int *p; //这是个指针常量 int const* p; //这是个常量指针 const是常量修饰符,被修饰的就是一个常量,常量的特性就是不能改变. 先介绍指针常量, const int *p; int i=2; p=&i; 这里*p就是一个常量,他的值不能改变,也就是不能再通过*p=1; 这样赋值而去改变 i 的值,但可以通过直接i=1;这样改变i的值,此时*p的值也相应变为了1 int const* p=NULL; int i

【读书笔记】C#高级编程 第六章 数组

(一)同一类型和不同类型的多个对象 如果需要使用同一类型的多个对象,就可以使用数组或集合(后面章讲). 如果需要使用不同类型的多个对象,可以使用Tuple(元组)类型. (二)简单数组 如果需要使用同一类型的多个对象,可以使用数组.数组是一种结构,它可以包含同一类型的多个元素. 1.数组的声明 在声明数组时,应先定义数组总元素的类型,其后是一堆空方括号和一个变量名. 例子: 以下代码声明了一个包含整形类型的数组 int[] intArray; 2.数组的初始化 声明了数组后,就必须为数组分配内存

【转】C语言-&gt;数组名与指针

以下内容转自: http://bbs.csdn.net/topics/390733584 感觉对自己有用,收藏了.如果转帖,请注明如上出处.多谢! 看到一篇关于C语言指针的文章,正好最近在看<C和指针>就去看了一下.<一道 C 语言指针访存题目的引申>,里面的第一个题目就把我难住了. 帮助123456789 #include <stdio.h>   int main() {     int a[5] = {1, 2, 3, 4, 5};     int *pa = (i