0 0

关于C语言数组与指针的疑问,请帮我解释下好吗5

int (*pointer) [3] = {7, 4, 5};
printf("pointer = %d\n", pointer);
printf("*pointer = %d\n", *pointer);


请问为什么打印出来的都是7啊?pointer在这里是不是指针变量呢?

问题补充:
xiangjie88 写道
pointer是数组指针,是一个指向有3个元素数组的指针。用gcc似乎是可以编过的,也确实能得到楼主的答案,但是却有一大堆警告。initialization makes pointer from integer without a cast...,出现这样的结果应该是编译器优化的原因,这段代码用g++是跑不了的
代码应该是这样的:
#include<stdio.h>
int main()
{
        int b[3][3]={1,2,3,4,5,6,7,8,9};
        int (*p1)[3] = b;
        printf("p=%d\n",p1[0][0]);//1
        printf("p=%d\n",(*p1)[0]);//1
}



这个告警什么意思呢?确实有这个告警。
我在想是不是编译器这么处理的:将数组第一个值(7)当做地址赋给pointer,同时将pointer指向的内存赋值为数组第一个值(还是7)。
因为我定义了pointer指向一个数组(也许这种定义是不合法的),我觉得**pointer也应该是7,但是报错
C 
2011年7月04日 23:03

3个答案 按时间排序 按投票排序

0 0

采纳的答案

嘿,警告就是警告你不能这样做,你不能把一个整型丢给一个指针.警告最好当作错误去看待。你程序写的不对,但是编译器可能知道了你的意思,帮你优化了下,给出了"你想要的结果",第一步就错了,然后你想接着再**pointer,编译器可没有这么聪明。
你可以去了解下数组指针和指针数组的区别,也就是(int*)p[],int*p[]

用我的那边代码**p就是首地址的值1了

2011年7月05日 15:16
0 0

pointer是数组指针,是一个指向有3个元素数组的指针。用gcc似乎是可以编过的,也确实能得到楼主的答案,但是却有一大堆警告。initialization makes pointer from integer without a cast...,出现这样的结果应该是编译器优化的原因,这段代码用g++是跑不了的
代码应该是这样的:

#include<stdio.h>
int main()
{
        int b[3][3]={1,2,3,4,5,6,7,8,9};
        int (*p1)[3] = b;
        printf("p=%d\n",p1[0][0]);//1
        printf("p=%d\n",(*p1)[0]);//1
}

2011年7月05日 10:15
0 0

你这个编译器什么版本啊 ?

这样的初始化也能正确? 这可是个二维数组指针 , 不能那样子初始化的。

#include <stdio.h>
#include <malloc.h>

typedef int (*Array)[10];


void print1(int **a,int x,int y)
{
	int i=0;
	for (;i<x;++i)
	{
		int j=0;
		for (;j<y;++j)
		{
			printf("%d-- ",a[i][j]=i);
		}
		printf("\n");
	}
}

void print2(Array a,int x,int y)
{
	int i=0;
	for (;i<x;++i)
	{
		int j=0;
		for (;j<y;++j)
		{
			printf("%d-- ",a[i][j]=i);
		}
		printf("\n");
	}

}

void initialize(int **array,int length,int columnCount)
{
	int i=0;
	for (;i<length;++i)
	{
		array[i]=(int*)calloc(columnCount,sizeof(int));
	}
}

void dispose(int **array,int length)
{
	int i=0;
	for (;i<length;++i)
	{
		free(array[i]);
		array[i]=NULL;
	}
}

int main()
{
	int *array1[5];
	Array array2=(Array)calloc(5,10*sizeof(int));

	////////////////////////////////////////////

	initialize(array1,5,10);

	print1(array1,5,10);

	printf("\n\n");

	dispose(array1,5);
	
	print2(array2,5,10);

	free(array2),array2=NULL;

	return 0;
}

2011年7月05日 10:04

相关推荐

    C语言中的指针学习.rar

    在C语言中,指针是其核心特性之一,它提供了对内存地址的直接操作,使得程序可以高效地处理数据和实现复杂的...《C语言中的指针学习》文档将详细阐述这些概念,并提供示例代码,帮助你更好地理解并运用到实际项目中。

    C语言教学中“指针教学方法”探讨.pdf

    - 疑问解答:在教学过程中,及时解答学生关于指针使用的疑问,帮助他们克服对指针的恐惧和误解。 - 错误分析:通过分析常见的指针错误,如野指针、悬空指针、指针越界等,提高学生的错误诊断和调试能力。 - 指针与...

    c faq (关于c语言的诸多疑问的权威解释,值得一读)

    本文将基于“C FAQ”(关于C语言的诸多疑问的权威解释)的内容,对其中涉及的关键知识点进行详细解析,帮助读者更好地理解和应用C语言。 #### 二、C FAQ概述 “C FAQ”是一份由Steve Summit编写的C语言常见问题...

    再再论指针

    ### 指针的核心概念与应用 #### 一、什么是数组名?——揭开惊人的真相! 数组是学习指针的基础,大多数程序员都是从数组开始接触指针这一概念的。但在日常编程实践中,对于数组名的理解常常存在误区。很多人认为...

    C语言从入门到精通

    此外,数组和指针是C语言的特色,也是其强大的地方。数组是一组相同类型的元素集合,可以一次性处理多个数据,而指针则可以存储内存地址,通过指针可以动态地操作和传递数据,实现更高效的数据操作。在学习这部分时...

    C语言高级编程技巧

    - **理解指针与数组的关系**:在C语言中,数组名实际上是一个指向数组首元素的常量指针。掌握这一特性对于高效使用指针至关重要。 - **复杂指针操作**:例如多级指针、指针数组等,这些技术能够帮助开发者更高效地...

    c语言参考手册与一本像手册一样的教程

    5. **数组与字符串**:讨论一维和多维数组,以及C语言中的字符串处理。 6. **指针**:深入解析指针的概念,如何通过指针访问和修改内存,以及指针运算。 7. **结构体与联合**:介绍复合数据类型,如何定义和使用...

    C语言知识点总结

    数组类型与数组指针有紧密的联系,数组指针可以用来指向数组中的元素或整个数组。 数组类型和数组指针之间的关系在于指针可以通过增加或减少一个偏移量来访问数组的连续元素。数组类型本质上是一种特殊的指针类型,...

    C语言教程PPT详细介绍C语言知识

    此外,与其他学习者交流,互相解答疑问,也是提升学习效果的有效方式。如果你在学习中遇到问题,可以通过邮件vvwxv@163.com与作者联系,获取更多的帮助和支持。 这个C语言课件应该包含了上述所有主题的详细讲解,...

    C语言常见问题集 C语言常见问题集

    本资源“C语言常见问题集”旨在为学习者提供一个全面的问题解答平台,帮助解决在学习过程中可能遇到的各种疑问。以下是针对C语言的一些核心知识点的详细解释: 1. **变量与数据类型**: - 变量是存储数据的容器,...

    C语言常见问题集

    这本书深入浅出地解答了495个C语言编程中常见的疑问,覆盖了从基础语法到高级特性的方方面面。通过阅读本书,读者能够扎实地掌握C语言的基础知识,并逐步提升编程技能。 C语言,由Dennis Ritchie在1972年开发,是一...

    谭浩强c语言电子书全本

    《谭浩强C语言》详细阐述了指针的概念,如何声明、初始化和使用指针,以及指针与数组、函数之间的关系。通过学习指针,读者可以更好地理解和操作内存。 结构体是C语言中组合复杂数据类型的方式,允许我们将不同类型...

    C语言经典教材 谭浩强C语言 电子书 world版

    书中涵盖了变量、数据类型、运算符、控制结构(如if语句和switch语句)、循环(for、while和do-while)、函数、数组、指针、结构体等核心内容。同时,谭教授还特别强调了程序设计的逻辑思维和调试技巧,这对于培养...

    c语言问题100题 C语言疑问解答

    在C语言中,基本数据类型包括整型(如`int`)、枚举型(`enum`)、数组型、指针型(`pointer`)、字符型(`char`)、实型(浮点型,如`float`或`double`)以及空类型(`void`)。枚举和构造型(结构体、联合体)虽然...

    上海市计算机二级C语言历年真题1997~2009

    4. **数组和指针**:C语言中的数组和指针紧密相连,它们是处理大量数据和实现高效算法的重要工具。理解数组的概念,以及指针的引用、操作和动态内存分配是C语言学习的难点。 5. **结构体与联合体**:结构体允许将...

    厦大C语言除疑系列讲座

    【厦大C语言除疑系列讲座】是一套针对C语言学习者精心打造的教育资源,旨在解答初学者在学习过程中可能遇到的各种疑问。该系列讲座由厦门大学的专业教师主讲,结合了理论与实践,深入浅出地讲解了C语言的核心概念和...

Global site tag (gtag.js) - Google Analytics